import { defineStore } from "pinia" // 定义容器
import api from "../api/sys/AuthApi"
export const userStore = defineStore('userStore', {
  /**
   * 存储全局状态
   * 1.必须是箭头函数: 为了在服务器端渲染的时候避免交叉请求导致数据状态污染
  */
  state: () => {
    return {
      token: "",
      user: {}
    }
  },
  /**
   * 用来封装计算属性 有缓存功能  类似于computed
   */
  getters: {
    isLogin(state) {
      return state.user.userId ? true : false;
    }
  },
  /**
   * 编辑业务逻辑  类似于methods
   */
  actions: {
    /**
     * 设置令牌
     * @param {string} token 
     */
    setToken(token) {
      this.token = token;
      this.loadUser();
    },
    /**
     * 加载用户信息
     */
    loadUser(){
      if(!this.token){
        return;
      }
      api.get().then(r=>{
        if(r.data.ok){
          this.user = r.data.data
        }
      });
    },
    /**
     * 重新获取令牌
     */
    reload(){
      if(!this.token){
        return;
      }
      api.reload().then(r=>{
        if(r.data.ok){
          this.setToken(r.data.data);
        }else{
          this.logout();
        }
      });
    },
    /**
     * 退出登录
     */
    logout(){
      this.user={};
      this.token="";
    }
  },
  persist: {
    enabled: true, // 开启缓存  默认会存储在本地localStorage
    strategies: [
      {
        key: 'userStore',
        storage: localStorage,
        paths:["token"]
      },
      {
        key: 'userStore',
        storage: sessionStorage,
        paths:["user"]
      }
    ]
  }

})